<?php
/**
 * 商城商品控制器
 */
class GoodsController extends AuthController {

	private $model;

	public function __init() {
		parent::__init();
		$this -> model = K('Goods');
	}

	/**
	 * 显示所有商品列表
	 */
	public function index() {
		$count = $this -> model -> count();
		$page = new Page($count, 10, 10);
		$this -> assign('page', $page -> show(2));
		//		var_dump($this->model->findAllGoods($count,10,10));
		$this -> assign('goods', $this -> model -> order('gid desc') -> findAllGoods($page -> limit()));
		$this -> display();
	}
	
	/**
	 * 返回当前商品所有的属性
	 * 先返回所有的商品属性
	 */
	 public function ajaxGoodsAttr($goods_typeid){
	 	if(!IS_AJAX) $this->error('非法请求');
		$typeAttrs = M('TypeAttr')->where("type_tid={$goods_typeid}")->all();
		var_dump($typeAttrs);
	 }
	 
	/**
	 * 删除列表图
	 */
	 public function dellistImg(){
	 	//商品ID
	 	$gid = Q('post.gid');
		$filename = Q('post.filename');
		if(!empty($filename)){
			//瘵goods_listimg清空
			$this->model->where("gid={$gid}")->update(array('goods_listimg'=>''));
			//再删除那张图片
			$root 		= dirname(dirname(HDPHP_PATH)).'/'.ROOT_PATH;
			$filepath 	= $root.$filename;
			unlink($filepath);
			$this->ajax(1);
		}
		
	 }
	

	/**
	 * 展示修改商品页面
	 * 1、获得当前商品的详细 信息。
	 * 2、
	 */
	public function editGoods() {
		$gid = Q('get.gid', 0, 'intval');
		//获得当前商品的详细信息
		$goods = $this->model->getGoodsDetail($gid);
		if(empty($goods)){
			$this->error('商品不存在',U('Goods/Index'));
		}
//		var_dump($goods);
		//将所有的分类 信息遍历到页面中
		$this->assign('category',K('Category')->getTree());
		//将商品信息分配到页面中
		$this->assign('goods',$goods);
		//遍历所有的品牌
		$this->assign('brand',K('brand')->all());
		//遍历当前商品选择的属性
		$goodsAttr = $this->model->getCurrentAttr($gid,0);
		foreach($goodsAttr as $key=>$value){
			$goodsAttr[$key] = $value['attr_value'];
		}
		$allAttr = K('TypeAttr')->typeAttrs($goods['goods_typeid']);
		//当前商品的属性
		$this->assign('goodsAttr',$goodsAttr);
		//获得当前商品类型所有的规格 
		$goodsSpec = $this->model->getCurrentAttr($gid,1);
//		array_reverse($goodsSpec);
		$this->assign('goodsSpec',$goodsSpec);
		//遍历当前商品分类属性			 
		$this->assign('typeattrs',$allAttr);
		//处理图册 
		if(!empty($goods['mediumimg'])){
			$photo = unserialize($goods['mediumimg']);
			//得到文件的名字除去_获得文件的后缀
			foreach($photo as $k=>$v){
				$photo[$k] = substr($v,0,strpos($v,'_'));
			}
			$this->assign('photo',$photo);	
		}
		
		$this -> display();
	}
	
	
	/**
	 * 修改商品提交
	 */
	public function subEditGoods() {
//		var_dump($_POST);
		$gid = Q('post.gid');
		//去除属性为0的元素
		if(!empty($_POST['typeattr_id'])){
			foreach ($_POST['typeattr_id'] as $k => $v) {
				if ($v == '0') {
					unset($_POST['typeattr_id'][$k]);
				}
			}	
		}
		//再删除原来的商品属性和规格 
		if($this->delOldGoodsAttrSpec($gid)){
			//重新添加商品属性和规格 
			$this->goodsAttr($gid,$_POST);	
		}
		//再将现在的内容更新到商品表中
		//获得一个商品表的数组
		//将库存设置为0
		$_POST['goods_count'] = 0;	
		if($this->model->where("gid={$gid}")->update($_POST)){
			//修改商品详细表
			if(K('GoodsDetailes')->updateGoodsDetails($gid,$_POST)){
				//删除原来的库存
				K('GoodsList')->delAllGoodsList($gid);
				$this->success('修改成功');
			}else{
				$this->error('修改失败');
			}
		}else{
			$this->error('修改失败');
		}
		
		
	
	}
	/**
	 * 商品下架方法
	 */
	 public function goodsStatus(){
	 	
		$status = Q('get.status',0,'intval');
		$gid = Q('get.gid',0,'intval');
		//表示商品要上架
		if($status==1){
			if($this->model->where("gid={$gid}")->update(array('goods_status'=>0))){
				$this->success('商品已经下架');
			}
		}else{
			if($this->model->where("gid={$gid}")->update(array('goods_status'=>1))){
				$this->success('商品已经上架');
			}
		}
		
		
	 }
	
	
	
	/**
	 * 删除原来的商品属性和规格 
	 */
	public function delOldGoodsAttrSpec($gid){
		if(K('GoodsAttr')->where("goods_gid={$gid}")->delete()){
			return true;
		}else{
			return false;
		}
	}
	

	/**
	 * 上传列表图
	 */
	public function uploadListImg() {
		$upload = new Upload('Upload/face/' . date('y/m'));
		$data = current($upload -> upload());
		if (empty($data)) {
			$this -> ajax('上传失败');
		} else {
			//来这个地方可以缩略图处理
			$img = new Image();

			//缩略为230的
			$bigPath = $data['dir'] . $data['filename'] . '_listimg.' . $data['ext'];

			//230图
			$file['listimg'] = $img -> thumb($data['path'], $bigPath, 230, 230, 6);
			//删除原图
			unlink($data['path']);
			$this -> ajax($file);
		}
	}

	/**
	 * 获得当前商品分类的类型属性
	 */
	public function ajaxTypeAttr() {
		//如果非AJAX请求直接返回false
		if (!IS_AJAX)
			return false;
		$type_id = Q('post.type_id', 0, 'intval');
		//查询所有相应type_id的所有类型属性
		$typeAttr = K('TypeAttr') -> where("type_tid={$type_id}") -> all();
		foreach ($typeAttr as $k => $v) {
			$typeAttr[$k]['attrvalue'] = explode(',', $v['attrvalue']);
		}
		//将数据发送以json形式返回给前端
		//			var_dump($typeAttr);
		
		$this -> ajax($typeAttr);
	}

	/**
	 * 重组商品属性再写入商品属性表中
	 */
	public function goodsAttr($gid, $data) {
//		p($data);die;
		/**
		 *	添加商品属性类型
		 *  先添加商品规格属性
		 */
		if (isset($data['spec_id'])) {
			
			foreach ($data['spec_id'] as $specId => $value) {
				foreach ($value as $k => $v) {
					$tmp = array('attr_value' => $v, 'added_price' => $data['added_price'][$specId][$k], 'goods_gid' => $gid, 'typeattr_id' => $specId);
					K('GoodsAttr') -> add($tmp);
				}
			}
		}

		/**
		 * 添加商品属性类型
		 */
		if (isset($data['typeattr_id'])) {
			foreach ($data['typeattr_id'] as $attrId => $attrVal) {
				$atmp = array('attr_value' => $attrVal, 'goods_gid' => $gid, 'typeattr_id' => $attrId);
				K('GoodsAttr') -> add($atmp);
			}
		}

	}

	/**
	 * 获得当前商品的分类的属性
	 */
	public function getGoodsAttr() {
		if (!IS_AJAX)
			$this -> error('非法请求');
		$gid = Q('post.gid');
		//获得当前商品所有的类型属性
		$goodsAttrs = K('GoodsAttr') -> getGoodsAttr($gid);
		//		var_dump($goodsAttrs);
		$this -> ajax($goodsAttrs);

	}

	/**
	 * 添加商品方法
	 */
	public function addGood() {
		//商品表数据
		$goodsData = array();
		//判断货号是否为空如果为空那自动生成一个
		if (empty($_POST['goods_sn'])) {
			$random = 'SHOP' . time() . mt_rand(0, 999);
			$_POST['goods_sn'] = $random;
			$goodsData['goods_sn'] = $random;
		}
		//去除属性为0的元素
		if(!empty($_POST['typeattr_id'])){
			foreach ($_POST['typeattr_id'] as $k => $v) {
				if ($v == '0') {
					unset($_POST['typeattr_id'][$k]);
				}
			}
			
		}
		//重组商品表数据//给商品表添加数据 返回一个商品ID
		$goodsid = $this -> model -> goodsTable($_POST);
		//当商品内容写入成功后再写入相应的商品详细和商品属性
		if ($goodsid) {
			//写入商品详细表
			if ( K('GoodsDetailes') -> goodsDetail($goodsid, $_POST)) {
				//写入商品属性
				$this -> goodsAttr($goodsid, $_POST);
				$this -> success('商品添加成功', U('Goods/index'));
			}
		} else {
			$this -> error('添加失败');
		}

	}

	/**
	 * 图片上传方法
	 * ajax返回相应的图片名  三套图的名
	 *  套图 放大镜用到800 小绘图400 小图列表68
	 *  封面 230
	 */
	public function upload() {
		$upload = new Upload('Upload/ImgLists/' . date('y/m'));
		$data = current($upload -> upload());
		if (empty($data)) {
			$this -> ajax('上传失败');
		} else {
			//来这个地方可以缩略图处理
			$img = new Image();

			//缩略为800的
			$bigPath = $data['dir'] . $data['filename'] . '_bigimg.' . $data['ext'];
			$mediumPath = $data['dir'] . $data['filename'] . '_medium.' . $data['ext'];
			$smallPath = $data['dir'] . $data['filename'] . '_small.' . $data['ext'];

			//大图
			$img -> thumb($data['path'], $bigPath, 800, 800, 6);
			//中图
			$file['thumb'] = $img -> thumb($data['path'], $mediumPath, 400, 400, 6);
			//小图
			$img -> thumb($data['path'], $smallPath, 68, 68, 6);
			//删除原图
			$file['filename'] = $data['dir'].$data['filename'];
			$file['ext'] = $data['ext'];
			unlink($data['path']);
			$this -> ajax($file);
		}
	}
	
	
	

	/**
	 * 删除图片
	 */
	public function delImg() {
		//获得要删除的文件名
		$imgPath = Q('post.imgpath', '', 'strval');
		$gid = Q('post.gid',0,'intval');
		$root = dirname(dirname(HDPHP_PATH)).'/'.ROOT_PATH;
		if($gid>0){
			//如果存在商品GID那么将他查询商品详细信息的相应的数据删除相应的图片三张图片分别为 _small.jpg _medium.jpg _bigimg.jpg
			$details = K('GoodsDetailes')->where("goods_gid={$gid}")->find();
			$tmp = unserialize($details['mediumimg']);
			if(in_array($imgPath.'_medium.jpg',$tmp)){
				$bigImg = $imgPath.'_bigimg.jpg';
				$medium = $imgPath.'_medium.jpg';
				$smallImg = $imgPath.'_small.jpg';
				//删除大图
				unlink($root.$imgPath.'_bigimg.jpg');
				//删除中图
				unlink($root.$imgPath.'_medium.jpg');
				//删除小图
				unlink($root.$imgPath.'_small.jpg');
				//删除相应的图片
				$detailsSmallImg = unserialize($details['smallimg']);
				$detailsMediumImg = unserialize($details['mediumimg']);
				$detailsBigImg = unserialize($details['bigimg']);
				if(empty($detailsMediumImg)){
					if(unlink($root.$imgPath.'_bigimg.jpg') && unlink($root.$imgPath.'_medium.jpg') && unlink($root.$imgPath.'_small.jpg')){
						$this->ajax(1);
					}
				}
				foreach($detailsMediumImg as $k=>$v){
					if($v==$medium){
						array_splice($detailsSmallImg,$k,1);
						array_splice($detailsMediumImg,$k,1);
						array_splice($detailsBigImg,$k,1);
					}
				}
				//再重新写回数据库
				$details['smallimg'] = serialize($detailsSmallImg);
				$details['bigimg'] = serialize($detailsBigImg);
				$details['mediumimg'] = serialize($detailsMediumImg);
				if(K('GoodsDetailes')->save($details)){
					$this->ajax(1);
				}
			}else{
				//删除大图
				unlink($root.$imgPath.'_bigimg.jpg');
				//删除中图
				unlink($root.$imgPath.'_medium.jpg');
				//删除小图
				unlink($root.$imgPath.'_small.jpg');
				$this->ajax(1);
			}
		}
//			
//			//删除大图//删除中图//删除小图
//			if(unlink($root.$imgPath.'_bigimg.jpg') && unlink($root.$imgPath.'_medium.jpg') && unlink($root.$imgPath.'_small.jpg')){
//				$this->ajax(1);
//			}
		}
	

	/**
	 * 添加新商品方法
	 */
	public function addGoods() {
		//分类信息分配到模板中
		$this -> assign('category', K('Category') -> getTree());
		//品牌信息分配 到模板中
		$this -> assign('brand', K('brand') -> all());
		$this -> display();
	}
	
	
	/**
	 * 商品删除
	 * 删除库存表  删除商品属性表  删除商品详细表 删除商品表  
	 * 删除图片 列表图  套图
	 */
	 
	 public function delGoods(){
	 	//获得商品ID
	 	$gid = Q('get.gid',0,'intval');
		//删除该商品的商品列表表
		K('GoodsList')->delAllGoodsList($gid);
		//删除该商品的商品属性表
		K('GoodsAttr')->where("goods_gid={$gid}")->delete();
		
		//获得该商品的的图片集
		$imgs = K('GoodsDetailes')->where("goods_gid={$gid}")->field('smallimg,mediumimg,bigimg')->find();
		//获得该商品的列表图
		$imglist = K('Goods')->where("gid={$gid}")->getField('goods_listimg');
		$allImgs = $this->moreToOne($imgs);
		if($imglist){
			$allImgs[] = $imglist;
		}
		//删除图片
		foreach($allImgs as $file){
			$this->trueDelImg($file);
		}
		//删除商品表
		$this->model->where("gid={$gid}")->delete();
		//删除商品表
		K('GoodsDetailes')->where("goods_gid={$gid}")->delete();
		$this->success('删除成功~!');

	 }
	
	 /**
	  * 将一个多维转为一个一维数组
	  */
	  private function moreToOne($arr){
	  		//将序列化转为数组
		$tmp = array();
		$allImgs =array();
		foreach($arr as $k=>$v){
			$tmp[] = unserialize($v);
		}
		//将多维数组转为一个一维数组
		
		foreach($tmp as $kk=>$vv){
			if($vv){
				foreach($vv as $vvv){
					$allImgs[] = $vvv;
				}	
			}
			
		}
		return $allImgs;
	  }
	 
	 
	 /**
	  * 删除一个图片
	  */
	  private function trueDelImg($path){
	  	//获得当前项目的绝对路径 
		$root = dirname(HDPHP_PATH);
	  	$truePath = $root.'/'.$path;
		//如果图片存在那么就删除
	  	if(file_exists($truePath)){
	  		unlink($truePath);
	  	}
	  }
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
}
